package com.wnxy.sdd.front.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wnxy.sdd.front.entity.Course;
import com.wnxy.sdd.front.service.ICourseDetailStaticService;
import com.wnxy.sdd.front.service.ICourseService;
import com.wnxy.sdd.front.service.IVideoService;
import com.wnxy.sdd.front.vo.CourseVo;
import com.wnxy.sdd.front.vo.VideoVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@Service
public class CourseDetailStaticServiceImpl implements ICourseDetailStaticService {

    @Autowired
    private TemplateEngine templateEngine;
    @Autowired
    private ICourseService courseService;
    @Autowired
    private IVideoService videoService;
    @Value("${index.goodCourseNum}")
    private Integer goodCourseNum;

    @Override
    public void generatorHtml() {

        // 页面静态化： 查询所有已发布的课程id
        LambdaQueryWrapper<Course> wrapper =
                Wrappers.lambdaQuery(Course.class)
                        .select(Course::getId) // select id from 表
                        .eq(Course::getStatus, "Normal");
        // 获取查询的所有课程
        List<Course> list = courseService.list(wrapper);
        list.forEach(course -> {
            try {
                doGeneratorHtml(course.getId());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });

    }

    private void doGeneratorHtml(String id) throws IOException {
        // 1. 创建上下文
        Context context = new Context();
        // 根据课程id查询
        CourseVo courseVo = courseService.queryCourseVoById(id);
        // 查询课程下的视频
        List<VideoVo> videoVoList = videoService.queryVideoByCourseId(id);
        // 精选好课
        List<CourseVo> goodCourseList = courseService.findCourseByBuyCount(goodCourseNum);
        context.setVariable("courseVo",courseVo);
        context.setVariable("videoVoList",videoVoList);
        context.setVariable("goodCourseList",goodCourseList);

        // 3. 定义生成静态页面需要存放的路径
        File file = new File("C:\\class\\workspace\\_3000\\sdd-online\\sdd-front\\src\\main\\resources\\static\\html\\" +
                courseVo.getId()+ ".html");
//        if(!file.exists()){
//            // 如果文件不存在，则创建文件
//            file.createNewFile();
//        }
        file.createNewFile();

        // 4. 使用模板引擎将数据写入到文件中
        PrintWriter writer = new PrintWriter(file);
        /**
         * 第一个参数: 模板的名称（就是html的名称）
         * 第二个参数: 上下文对象（里面包含页面需要显示的数据）
         * 第三个参数: 输出流
         */
        templateEngine.process("course_detail", context, writer);
    }
}
